package me.lcc.demo.chapter2.topic1;

/**
 * i++ 和 ++i的问题演示<br>
 * i++ 和 ++i的底层操作都是 iinc 唯一的差别就是在赋值给其他变量时，是否会产生一个临时变量（姑且这么称呼吧）
 */
public class JvmIincDemo {
//	 Code:
//       0: iconst_0
//       1: istore_1
//       2: iload_1				先取出了a 也就是a当前的值为0
//       3: iinc		1, 1	再进行自增操作，对iload_1的值没有影响，因此istore_2的操作针对的是0而不是1.
//       6: istore_2			赋值给b
//       7: return
	@SuppressWarnings("unused")
	public void m1() {
		int a=0;
		int b=a++;
	}
	
//	Code:
//       0: iconst_0
//       1: istore_1
//       2: iinc          1, 1	先进行自增操作，a从0变成了1
//       5: iload_1				取出a
//       6: istore_2			赋值给b
//       7: return
	@SuppressWarnings("unused")
	public void m2() {
		int a=0;
		int b=++a;
	}
	
//	Code:
//       0: iconst_0
//       1: istore_1
//       2: iinc          1, 1
//       5: iinc          1, 1
//       8: return			因为没有要赋值给其他变量的操作，所以直接进行了两次自增的操作。
	@SuppressWarnings("unused")
	public void m3() {
		int a=0;
		a++;
		++a;
	}
}
